/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.List;

import modelo.Persona;
import modelo.Seccion;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Elias Mendoza
 */
public class PersonaDao extends OperacionesDao {

  public int totalPersonas() {
    int total = 0;
    try {
      iniciarOperacion();
      Criteria criteria = sesion.createCriteria(Persona.class);
      criteria.setProjection(Projections.rowCount());
      total = (Integer) criteria.uniqueResult();

      System.out.println(total);


    } finally {
    }
    return total;
  }

  public  List numeroPersonasBySeccion(){
    List lista = null;
    try{
      iniciarOperacion();
      Query query = sesion.createQuery("select distinct numero,count(elements(personas)) from Seccion Group by numero order by numero");
      lista = query.list();
    }finally{
      sesion.close();
    }
    return lista;
  }
  public List personasBySeccion(int numseccion){
    List lista = null;
    try{
      iniciarOperacion();
      Query query = sesion.createQuery("select elements(personas) from Seccion where numero= :numero");
      query.setParameter("numero", numseccion);
      
      lista = query.list();
      for(Object obj:lista){
        Persona persona =(Persona) obj;
        System.out.println(persona);
      }
      
    }finally{
      sesion.close();
    }
    return lista;
   
  }
    public List personasByAmigo(int numamigo){
    List lista = null;
    try{
      iniciarOperacion();
      Query query = sesion.createQuery("select elements(personas) from Amigo where id= :id");
      query.setParameter("id", numamigo);
      lista = query.list();
      for(Object obj:lista){
        Persona persona =(Persona) obj;
        System.out.println(persona);
      }
      
    }finally{
      sesion.close();
    }
    return lista;
   
  }
    public List consultaPersona(DetachedCriteria query){
      List lista = null;
      try{
                
        iniciarOperacion();
      
        lista  = query.getExecutableCriteria(sesion).list();
       
      }finally{
        sesion.close();
      }
      return lista;
    }
    public Persona personaRepetida(String nombre,String apellidoP,String apellidoM){
      Persona persona =null;
      try{
        iniciarOperacion();
        Criteria criteria = sesion.createCriteria(Persona.class);
        criteria.add(Restrictions.like("nombre", nombre+"%"));
        criteria.add(Restrictions.like("apellidoPaterno", apellidoP+"%"));
        criteria.add(Restrictions.like("apellidoMaterno", apellidoM+"%"));
        persona = (Persona) criteria.uniqueResult();
        
      }finally{
        sesion.close();
      }
      return persona;
      
    }
  
}
